package partner_system

import (
	"gitee.com/theegg/go-brick/app/controller/partner_api"
	"gitee.com/theegg/go-brick/app/model/partner/partner_admin/partner_admin_permissions"
	"gitee.com/theegg/go-brick/app/model/system/system_configures"
	"gitee.com/theegg/go-brick/app/service/app"
	"gitee.com/theegg/go-brick/app/service/help/cstruct"
	"github.com/gin-gonic/gin"
	"strconv"
)

// @title PartnerConfiguresList
// @description 获取管理角色列表
func PartnerConfiguresList(c *gin.Context) {
	// 检验参数
	var validaParams system_configures.QueryParams
	if err := c.ShouldBind(&validaParams); err != nil {
		app.NewResponse(c).JsonReturn(false, err.Error(), nil)
		return
	}

	// 获取数据
	data, err := system_configures.GetDataList(cstruct.StructToMap(validaParams))

	if err != nil {
		app.NewResponse(c).JsonReturn(false, "获取数据失败", nil)
		return
	}

	returnData := make(map[string]interface{})

	// 获取可选上级菜单
	parentOption := make([]map[string]interface{}, 0)
	firstMenuOption := map[string]interface{}{"value": 0, "label": "-- 顶级配置 --"}
	parentOption = append(parentOption, firstMenuOption)

	for _, item := range data {
		parentOption = append(parentOption, map[string]interface{}{"value": item.Id, "label": item.Title})
	}

	returnData["parent_option"] = parentOption
	returnData["configure_type_option"] = system_configures.ConfigureType
	returnData["data"] = data

	app.NewResponse(c).JsonReturn(true, "获取数据成功", returnData)
	return
}

// @title PartnerConfiguresAdd
// @description 添加或者更新配置
func PartnerConfiguresAdd(c *gin.Context) {
	idStr := c.PostForm("id")
	id, err := strconv.ParseInt(idStr, 10, 64)
	if err != nil {
		app.NewResponse(c).JsonReturn(false, err.Error(), nil)
		return
	}

	var modelPc *system_configures.SystemConfigures
	if id > 0 {
		modelPc, err = system_configures.GetItemById(id)
		if err != nil {
			app.NewResponse(c).JsonReturn(false, err.Error(), nil)
			return
		}
	} else {
		modelPc = new(system_configures.SystemConfigures)
	}

	// 校验参数
	var validaParams system_configures.AddParams
	if err := c.ShouldBind(&validaParams); err != nil {
		app.NewResponse(c).JsonReturn(false, "bind-json-"+err.Error(), nil)
		return
	}

	adminConfigure, err := modelPc.AddOrUpdatePartnerConfigure(validaParams)
	if err != nil {
		app.NewResponse(c).JsonReturn(false, err.Error(), adminConfigure)
		return
	}

	app.NewResponse(c).JsonReturn(true, "添加数据成功", adminConfigure)
	return
}

// @title GetPartnerConfigure
// @description 编辑配置
func PartnerConfiguresDetail(c *gin.Context) {
	idStr := c.PostForm("id")
	id, err := strconv.ParseInt(idStr, 10, 64)
	if err != nil {
		app.NewResponse(c).JsonReturn(false, err.Error(), nil)
		return
	}

	item, errItem := system_configures.GetItemById(id)
	if errItem != nil {
		app.NewResponse(c).JsonReturn(false, errItem.Error(), nil)
		return
	}

	data := make(map[string]interface{})
	data["id"] = item.Id
	data["pid"] = item.Pid
	data["title"] = item.Title
	data["sign"] = item.Sign
	data["value"] = item.Value
	data["sort"] = item.Sort
	data["mark"] = item.Mark
	app.NewResponse(c).JsonReturn(true, "获取数据成功", data)
	return
}

// @title PartnerConfiguresDel
// @description 删除配置
func PartnerConfiguresDel(c *gin.Context) {
	idStr := c.PostForm("id")
	id, err := strconv.ParseInt(idStr, 10, 64)
	if err != nil {
		app.NewResponse(c).JsonReturn(false, err.Error(), nil)
		return
	}

	// 判定当前登陆用户是否存在
	currentAdminUser := partner_api.GetLoginPartnerAdminUser(c)

	// 只有超级管理员才可以
	role, err := currentAdminUser.Role()
	if err != nil {
		app.NewResponse(c).JsonReturn(false, app.NewError(err).Error(), nil)
		return
	}

	if !role.IsSuperRole() {
		app.NewResponse(c).JsonReturn(false, app.NewError("对不起,只有超级管理员可以删除配置!").Error(), nil)
		return
	}

	// 删除
	ok, err := partner_admin_permissions.DeleteAdminPermission(id)
	if err != nil {
		app.NewResponse(c).JsonReturn(false, err.Error(), nil)
		return
	}

	if !ok {
		app.NewResponse(c).JsonReturn(false, "对不起，删除数据发生未知错误,请联系客服!", nil)
		return
	}

	app.NewResponse(c).JsonReturn(true, "删除成功成功", nil)
	return
}
